iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0

This

JavaScript 的 This 會指向不同的對象,這依據函數如何被呼叫的。
當函數被呼叫,形成新的執行環境,而每個執行環境有自己的變數環境
(Variable Environment),也就是被創造在函數的變數所在。如果找不到函數裡面變數的參考,它會到外面找,直到全域環境(global)為止。

JavaScript 的This 如果是在物件的函數中,那麼這個this指的是調用這個方法的對象
EX:

var person = {
  firstName: "Ivy",
  lastName : "Huang",
  id : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};

console.log(person.fullName()); //Ivy Huang

這裡的this 指的是 person這個物件,因為person調用了它自己的方法 —— fullName。

知道了這個概念,我們可以利用物件方法的 this 來改變此物件的屬性
EX:

var person = {
firstName: "Ivy",
  lastName : "Huang",
  id : 5566,
    changeName : function(newName){
    this.firstName = newName;
    }
};

person.changeName('Lisa');
console.log(person.firstName);//Lisa


如果只是純粹呼叫函數呢?
EX:

function a (){
console.log(this);

}
a(); // window

var b = function(){
  console.log(this);
}
b(); //window

也是指向同一個物件,window。

console.log(this)
//VM149:1 Window {0: global, 1: global, 2: global, 3: Window, 4: Window, 5: global, window: //Window, self: Window, document: document, name: '', location: Location, …}

這裡的this指的是全域物件,在瀏覽器裡面是window這個物件。

小提醒:在物件裡面的箭頭函式的this指的是window 物件!

EX:

var person = {
name: 'Ivy',
age:20,

callName: ()=>{
console.log(this.name)
},
}

person.callName();//undifined

因為這個callName的this指的是window 物件。

菜鳥教程


上一篇
JavaScript | By value V.S. By reference(傳值 V.S. 傳參考)
下一篇
JavaScript Arrow Function(箭頭函式)
系列文
開始入坑網頁吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言